JS-[核心篇]-JS引擎 與 運行環境


什麼是JS引擎?(每個瀏覽器都有自己的引擎...)

JS引擎,主要任務是將JS程式碼轉換為可執行的機器代碼,並在計算機上運行它,以便用戶可以與網頁進行互動;每個瀏覽器都有自己的JS引擎,然後最有名的是Google V8 引擎。

  • 最有名Google V8 引擎:給了google chrome瀏覽器提供動力,也給了Node.js提供動力。Node.js使我們可以利用JS構建server端(脫離了瀏覽器)

JS引擎的基本組成(call stack & heap)

  • 調用堆疊中的程式碼又是如何被編譯成電腦能懂的機器語言(0與1)呢,才能在編譯後執行?
    • 每一個計算機程序最終都需要轉換成“機器碼”,也就是0和1。可以透過『編譯』和『解譯』來實現。

先談談 編譯(Compilation)和 解譯(Interpretation)的區別

先看ChatGPT定義:

  • 編譯(Compilation):編譯是一種將高級程式語言代碼轉換為低級機器碼(機器碼)或其他可執行代碼的過程。編譯器(Compiler)負責處理整個程式,並在執行之前將其翻譯為機器碼。一旦程式編譯完成,就可以多次執行,而不需要再次編譯。經過編譯的程式執行速度通常較快。

  • 解譯(Interpretation):解譯是一種運行高級程式語言代碼的方式,而不是事先將其轉換為低級機器碼。解譯器(Interpreter)逐行解釋並執行程式碼,每次執行都需要重新解釋。這意味著解譯程式通常執行速度較慢,但更靈活,因為可以根據不同環境和平台運行相同的程式。


現代的JS -> JIT語言

  • 稍微分析一下在瀏覽器引擎中編譯->執行的過程:

生成的AST抽象語法樹:舉例

JS在瀏覽器中所運行時的環境

JS runtime就像是大盒子,包含了我們在瀏覽器中使用JS所需要的所有東西。在JS運行時,最重要的仍然是JS引擎(發動機),當我們在講到JS運行環境就一定會講到JS引擎,但光有引擎是不夠的,還需要Web APIs

Web APIs是提供給引擎的功能,不是JS本身的東西,JS是透過globe window object物件來訪問這些API的

callback queue回調列隊(這是一種數據結構),包含了所有準備執行的回調列隊,事件監聽器中的回調函式

event loop,就像是這運行環境的指揮官,event loop會等到call stack中的(同步)函式都執行完畢清空之後,它會調度callback queue回調列隊中的callback function到call stack去執行。

圖片擷取自 Udemy-The Complete JavaScript Course 2023: From Zero to Expert!
講師Jonas 這門課協助我立下了很好的JS基礎!!!

這是在node運行時的環境

圖片擷取自 Udemy-The Complete JavaScript Course 2023: From Zero to Expert!


以下為補充資料:

強烈推薦這個影片!event loop到底是什麼玩意兒?

event loop是使JS可以實現非同步行為的原因

圖片擷取自 Udemy-The Complete JavaScript Course 2023: From Zero to Expert!

圖片擷取自 Udemy-The Complete JavaScript Course 2023: From Zero to Expert!








你可能感興趣的文章

Redux(三):純函數 (Pure Function) 簡介

Redux(三):純函數 (Pure Function) 簡介

APIFlask 初始化專案 - Part2

APIFlask 初始化專案 - Part2

[第二週] 位元運算  判斷奇偶數不是只能取餘數

[第二週] 位元運算 判斷奇偶數不是只能取餘數






留言討論